package org.jsola.hr.query;

import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jsola.core.query.BaseQuery;
import org.jsola.orm.filter.Order;
import org.springframework.util.CollectionUtils;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.ArrayList;
import java.util.List;

/**
 * 客户详情表
 *
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class CrmCustomerInfoQuery extends BaseQuery {

    private static final long serialVersionUID = 1L;



    @ApiParam(value = "排序字段", allowMultiple=true, type="Order" ,example = "\"orders\": [{\"property\": \"userName\",\"desc\": false}]")
    private List<Order> orders;

    /**
     * 公司名
     */
    @ApiParam(value = "公司名")
    private String companyName;

    /**
     * 公司地址
     */
    @ApiParam(value = "公司地址")
    private String companyAddress;

    /**
     * 项目名称
     */
    @ApiParam(value = "项目名称")
    private String entryName;

    /**
     * 产品名称
     */
    @ApiParam(value = "产品名称")
    private String productName;


    /**
     * 类型1潜在2签约
     */
    @ApiParam(value = "类型1潜在2签约")
    private Integer type;


    /**
    * 客户ID
     */
    @ApiParam(value = "客户ID")
    private String customerId;

    /**
     * 成员ID集合
     */
    @ApiParam(value = "成员ID集合")
    private List<String> memberIdList;

    /**
     * 是否公海数据
     */
    @ApiParam(value = "是否公海数据")
    private Boolean isPublic;

    /**
     * 拜访结束时间
     */
    @ApiParam(value = "拜访结束时间")
    private String visitTimeEnd;

    /**
     * 拜访开始时间
     */
    @ApiParam(value = "拜访开始时间")
    private String visitTimeStart;

    /**
     * 签约结束时间
     */
    @ApiParam(value = "签约结束时间")
    private String signTimeEnd;

    /**
     * 签约开始时间
     */
    @ApiParam(value = "签约开始时间")
    private String signTimeStart;

    /**
     * 分配结束时间
     */
    @ApiParam(value = "分配结束时间")
    private String distributeOrGetTimeEnd;

    /**
     * 分配开始时间
     */
    @ApiParam(value = "分配开始时间")
    private String distributeOrGetTimeStart;

    /**
     * 成员ID
     */
    @ApiParam(value = "成员ID")
    private String memberId;

    /**
     * 所属成员名字
     */
    @ApiParam(value = "所属成员名字")
    private String memberName;

    /**
     * 来源类型（1分配2录入3领取）
     */
    @ApiParam(value = "来源类型（1分配2录入3领取）")
    private Integer sourceType;


    /**
     * 姓名、手机号、公司名、分配人
     */
    @ApiParam(value = "姓名、手机号、公司名、分配人")
    private String baseGet;

    /**
     * 每页的条数
     */
    @ApiParam(value = "分页参数，每页的条数", example = "20")
    @Max(value = 1000, message = "pageSize不能大于1000")
    private Integer pageSize = 20;

    /**
     * 当前第几页
     */
    @ApiParam(value = "分页参数，第几页", example = "1")
    @Min(value = 1, message = "pageNo不能小于1")
    private Integer pageNo = 1;



    /**
     * 添加排序
     * @param propertyName 属性名
     * @param desc 是否降序
     * @return this
     */
    public CrmCustomerInfoQuery addOrder(String propertyName, boolean desc) {
        if (CollectionUtils.isEmpty(this.orders)) {
            this.orders = new ArrayList<>();
        }
        this.orders.add(new Order(propertyName,desc));
        return this;
    }

}

